/**
 * wdk.com Inc.
 * Copyright (c) 2004-2018 All Rights Reserved.
 */
package com.da.javatest.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.da.javatest.bean.JsonData;
import org.apache.commons.lang3.StringUtils;

/**
 * 分发json转换工具
 *
 * @author yundian
 * @version $Id: DistJsonUtil.java, v 0.1 2018年11月05日 8:47 PM yundian Exp $
 */
public class DistJsonUtil {
    /**
     * 字符编码
     */
    public static final String CHARSET = "UTF-8";

    /*=======================================对象转其他start=====================================*/

    /**
     * object转字符串
     *
     * @param object
     * @return
     */
    public static String toJsonString(Object object) {
        if (object == null) {
            return null;
        }

        return JSONObject.toJSONString(object);
    }

    /**
     * object转消息体，JSON格式
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static byte[] toMsgBody(Object object) throws Exception {
        if (object == null) {
            return null;
        }
        return JSONObject.toJSONString(object).getBytes(CHARSET);
    }
    /*=======================================对象转其他end=======================================*/

    /*=======================================其他转对象start=====================================*/

    /**
     * 消息体转jsonObject
     *
     * @param msgBody
     * @return
     * @throws Exception
     */
    public static JSONObject parseMsgBody(byte[] msgBody) throws Exception {
        if (msgBody == null || msgBody.length == 0) {
            return null;
        }
        String jsonStr = new String(msgBody, CHARSET);
        return JSONObject.parseObject(jsonStr);
    }

    /**
     * 消息体转JSONArray
     *
     * @param msgBody
     * @return
     * @throws Exception
     */
    public static JSONArray parseMsgBodyArray(byte[] msgBody) throws Exception {
        if (msgBody == null || msgBody.length == 0) {
            return null;
        }
        String jsonStr = new String(msgBody, CHARSET);
        return JSONArray.parseArray(jsonStr);
    }

    /**
     * JSON消息体内容转object
     *
     * @param msgBody
     * @param clazz
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> T parseMsgBody(byte[] msgBody, Class<T> clazz) throws Exception {
        if (msgBody == null || msgBody.length == 0) {
            return null;
        }
        String jsonStr = new String(msgBody, CHARSET);
        return JSONObject.parseObject(jsonStr, clazz);
    }

    /**
     * json字符串转换对象
     *
     * @param jsonStr
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T parse2Object(String jsonStr, Class<T> clazz) {
        if (StringUtils.isBlank(jsonStr)) {
            return null;
        }
        return JSONObject.parseObject(jsonStr, clazz);
    }

    /**
     * json数组字符串转换为List对象
     *
     * @param jsonStr
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> parse2Array(String jsonStr, Class<T> clazz) {
        if (StringUtils.isBlank(jsonStr)) {
            return null;
        }
        return JSONArray.parseArray(jsonStr, clazz);
    }
    /*=======================================其他转对象end=======================================*/

    /*=======================================Map和字符串转换start=====================================*/

    /**
     * Map转JSON
     *
     * @param map
     * @return
     */
    public static String map2String(Map<String, String> map) {
        if (map == null) {
            return null;
        }
        return JSONObject.toJSONString(map);
    }

    /**
     * JSON转换为Map
     *
     * @param str
     * @return
     */
    public static Map<String, String> string2Map(String str) {
        return JSONObject.parseObject(str, HashMap.class);
    }

    /*=======================================Map和字符串转换end=======================================*/

    public static void main(String[] args) {
        JsonData j1 = new JsonData(1, "张三", Arrays.asList("唱", "跳"));
        JsonData j2 = new JsonData(2, "李四", Arrays.asList("rap", "篮球"));
        List<JsonData> jsonData = Arrays.asList(j1, j2);
        String s = DistJsonUtil.toJsonString(jsonData);
        System.out.println(s);
        System.out.println(DistJsonUtil.parse2Array(s, JsonData.class));


    }
}